package com.lsc.www.day07;

public class Master {
    /*
    * 使用多态语法机制
    * 1.Animal 和 Cat 之间存在继承关系，Animal父类 Cat子类
    *   new Cat() 实际创建的对象类型是Cat ，a 他引用的数据类型是Animal ,
    * 由此可见他们进行了类型转换,并且是子类型转父类型的
    * 这种转换我们称之为向上转型(upcasting),自动类型转换
    *向上转型
    * 父类型<——子类型
    *
    * JAVA中是允许这种语法的：父类型引用指向子类型对象
    *
    *
    * 除了上面的向上转型
    * 还有一种向下转型(downcasting)
    * 父类型——>子类型
    * 这个向下转型又被称为强制类型转换（需要加强制转换符）
    *
    * 要记住！
    * 无论是向上转型还是向下转型，两种类型之间必须要有继承关系
    * 没有继承关系程序是无法编译通过的
    *
    * 引用变量有两种形态
    * 编译时
    * 编译时就是根据你前面引用类型来决定的
    *
    * 运行时
    * 而运行时则是根据你实际创建的对象来决定的
    *
    * 父类型引用指向子类型对象这种机制导致了程序在编译绑定和运行绑定有两种不同的形态/状态，
    * 这种机制可以成为多态机制的语法
    *
    *
    * 主人【类】
    * 主人可以喂养宠物，引出喂养方法
    *
    * */

//    //喂猫
//    public void feed(Cat c){
//        c.eat();
//    }
//
//    //喂狗
//    public void feed(Dog d){
//        d.eat();
//    }
    //以上代码的耦合度和高，这对于程序来说不是件好事，耦合度越高程序的可拓展性越差

    //接收参数换喂animal类型的我们就只需要写一个方法就可以饲养全部的动物
    //耦合度
    public void feed(Animal a){
        a.eat();
    }
    //喂鸟


}
